iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0

在好幾年前串接金流的時候,還有沒定期定額的選項,
記得那時接觸的是團體的捐款網站要串接定期定額的功能,
當初第一次碰到的時候還想說自創名詞咧,分期就分期,
搞啥定期定額,現在想起來倒是有些趣味,
分期是一個金額分成好幾份,定期定額是一個金額指定好幾次,
看起來很像,但在實做上就不太一樣了,
一樣看一下table有什麼變化

Schema::create('order', function (Blueprint $table) {
    $table->string('id', 30)->comment('訂單id');
    $table->string('name', 30)->comment('購買人姓名');
    $table->integer('amount')->default(0)->comment('總金額');
    $table->integer('origin_order_id')->default(0)->comment('原始訂單id');
    $table->string('status', 20)->default('pending')->comment('訂單狀態');
    $table->primary(['id']);
});
        
Schema::create('payment', function (Blueprint $table) {
    $table->string('id', 30)->comment('同訂單id');
    $table->string('payment_id', 30)->comment('金流單id');
    $table->string('type', 20)->comment('付款類型'); //credit, atm
    $table->integer('period')->default(0)->comment('分期期數');
    $table->integer('current_period')->default(1)->comment('當前期數');
    $table->string('status', 30)->default('unpaid')->comment('付款狀態');
    $table->dateTime('expired_at')->nullable()->comment('付款截止時間');
    $table->dateTime('paid_at')->nullable()->comment('付款時間');
    $table->text('info')->nullable(); // 付款資訊物件(ATM帳號/超商代碼/超商條碼)
    $table->float('amount')->default(0); // 金額
    $table->float('fee')->default(0); // 手續費
    $table->primary(['id']);
});

在order新增origin_order_id欄位去紀錄哪一筆是初始訂單,
再來因為定期定額,顧名思義每次金額都一樣,
所以把payment的first_period_price跟each_period_price移除,
結構上異動不算太大,但是作法就很不一樣了,
分期付款如果可以接收到金流的通知的話,我們會修改payment的資料,
去紀錄最新的期數、期數資訊等等,
但在定期定額這邊,接收到新的一期資料時,我們需要建立一組新的訂單,
包含order_item、payment、payment_log等等,
最後用order.origin_order_id判斷第一筆以及分類查詢,
以上就是定期定額大致的作法,倒數幾天了gogogo。


上一篇
Day27 訂單 -- 分期付款
下一篇
Day29 訂單 -- 訂閱
系列文
掌握訂單與線上金流的剪不斷理還亂30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言